# encoding=utf-8

import warnings

warnings.filterwarnings('ignore')
#显示中文
from pylab import *  #显示中文

mpl.rcParams['font.sans-serif'] = ['SimHei']  #显示中文
#画图中显示负号
import matplotlib

matplotlib.rcParams['axes.unicode_minus'] = False

############################################

import pandas as pd
import seaborn as sns
from sklearn.preprocessing import StandardScaler,PolynomialFeatures
from sklearn.metrics import mean_squared_error, r2_score, mean_absolute_error
from sklearn.linear_model import Lasso,Ridge,LinearRegression
from sklearn.model_selection import cross_val_score,GridSearchCV, train_test_split

np.set_printoptions(threshold=np.inf)
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

# 对hour.csv数据进行如下操作：
# 1、	读取数据信息（5分）
hour = pd.read_csv("hour.csv")
# 2、	打印前5行信息（5分）
print(hour.head())
# 3、	打印数据信息（5分）
print(hour.info())
# 4、	打印数据描述（5分）
print(hour.describe())
# 5、	判定instant是否是索引列（10分）
print(hour.index.name == 'instant' )
# 6、	将所有连续特征和标签cnt比较皮尔逊系数并用热图显示（10分）
sns.heatmap(hour[['temp', 'atemp', 'casual', 'registered', 'hum', 'windspeed', 'cnt']].corr(), annot = True)
plt.show()
# 7、	删除掉认为没有的特征（5分）
#atemp和temp相关度过高，删除
del hour['atemp']
# 8、	对离散特征进行独热编码处理（10分）
hour = pd.get_dummies(hour, columns = ['season','holiday','workingday','weathersit'])
# 9、	使用标准化处理连续特征（10分）
sc = StandardScaler()
sc_data = sc.fit_transform(hour[['temp', 'casual', 'registered', 'hum', 'windspeed']])
# 10、	删除掉处理前的连续特征（5分）
hour[['temp', 'casual', 'registered', 'hum', 'windspeed']] = sc_data
# 11、	将数据切分为x，y，使用留出法切分7:3（10分）
X = hour[hour.columns[:-1]]
y = hour['cnt']
X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3)
# 12、	创建线性回归，进行模型的预测处理（10分）
ridge = Ridge(alpha = 0.1)
ridge.fit(X_train, y_train)
pred_test = ridge.predict(X_test)
# 13、	打印mse，mae，r方（10分）
print('mse:', mean_squared_error(y_test, pred_test))
print('mae:', mean_absolute_error(y_test, pred_test))
print('r2:', r2_score(y_test, pred_test))
